﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ServiceSATT;
using ApplicationContext;
using System.Text.RegularExpressions;

namespace UI_SATT
{
    public partial class FrmNuevoAfiliado : Form, IListadoPais, IListadoProvincia, IListadoLocalidades, IInterfazPersona, IlistadoNacionalidad, IInterfazLogin
    {
        #region Atributos Privados
        string ImplementaPais = "UbicacionService";
        string ImplementaPersona = "PersonaService";
        string ImplementaLogin = "LoginService";
        string ImplementaAfiliadoCategoria = "AfiliadoCategoriaService";
        IPaisService PaisServ;
        IProvinciaService ProvServ;
        ILocalidadService LocServ; 
        IAfiliadoCategoriaService AfiliadoCategoriaServicio;
        Form padre;
        #endregion

        #region Metodos Del Formulario

        public FrmNuevoAfiliado()
        {
            InitializeComponent();
            GrpMenor.Visible = true;
        }

        public FrmNuevoAfiliado(string Tipo,Form Padre)
        {
            InitializeComponent();
            padre = Padre;
                 ChkEmpleado.Enabled = false;
                 ChkArbitro.Enabled = false;
                 ChkAfiliado.Enabled = false;
            switch (Tipo)
            { 
                 
                case "Afiliado":
                   
                    ChkAfiliado.Checked = true;
                    GrpMenor.Visible = true;
                    ChkAfiliado.Enabled = true;
                    break;
                case "Empleado":
                    ChkEmpleado.Checked = true;
                    ChkEmpleado.Enabled = true;
                    break;
                case "Arbitro":
                    ChkArbitro.Checked = true;
                    ChkArbitro.Enabled = true;
                    ;
                    break;

            }
        }

        private void FrmNuevoAfiliado_Load(object sender, EventArgs e)
        {
            PaisServ = (IPaisService)AppContext.Instance.GetObject(ImplementaPais);
            PaisServ.Listado(this);
            PaisServ.ListadoNac(this);
            CboProvincia.SelectedIndex = -1;
            CheckActivo.Checked = true;
        }

        private void BtnGrabar_Click(object sender, EventArgs e)
        {
            IPersonaService PersonaServicio = (IPersonaService)AppContext.Instance.GetObject(ImplementaPersona);
            ILoginService LoginServicio = (ILoginService)AppContext.Instance.GetObject(ImplementaLogin);
            AfiliadoCategoriaServicio = (IAfiliadoCategoriaService)AppContext.Instance.GetObject(ImplementaAfiliadoCategoria);
            try
            {
                if (TxtDni.Text != "" && TxtNombre.Text != "" && TxtApellido.Text != "" && DtFechaNac.Value != DateTime.Today &&
                    CboNacionalidad.SelectedIndex > -1 && CboPais.SelectedIndex > -1 && CboProvincia.SelectedIndex > -1 &&
                    CboLocalidades.SelectedIndex > -1 && TxtDomicilio.Text != "" && txtUsuario.Text != "" && txtPassword.Text != "")
                {
                    if (ChkAfiliado.Checked || ChkArbitro.Checked || ChkEmpleado.Checked)
                    {
                        if (radioButton1.Checked || radioButton2.Checked)
                        {
                            if (ChkAfiliado.Checked)
                            {
                                PersonaServicio.Actualizar(this);
                                LoginServicio.Actualizar(this);
                                AfiliadoCategoriaServicio.Agregar(this);
                                MessageBox.Show("Usuario Agregado con éxito");
                                this.DialogResult = DialogResult.OK;
                            }
                            else
                            {
                                PersonaServicio.Actualizar(this);
                                LoginServicio.Actualizar(this);
                                MessageBox.Show("Usuario Agregado con éxito");
                                this.DialogResult = DialogResult.OK;
                            }
                        }
                        else
                            MessageBox.Show("Asignele un Sexo a la Persona.");
                    }
                    else
                        MessageBox.Show("Debe asignarle un Tipo a la Persona, ya sea un Arbitro, Empleado, Afiliado o varios.");
                }
                else
                    MessageBox.Show("Complete todos los campos antes de continuar.");

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                this.DialogResult = DialogResult.Cancel;
            }
            if (padre != null)
            {
                if (padre.Name == "FrmNuevoArbitro")
                {
                    FrmNuevoArbitro.DniArbitro = this.Dni;
                }
                if (padre.Name == "FrmNuevaAfiliacion")
                {
                    FrmNuevaAfiliacion.DniAfiliado = this.Dni;
                }
            }
           
        }

        private void TxtDni_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
            {
                try
                {
                    IPersonaService PersonaServicio = (IPersonaService)AppContext.Instance.GetObject(ImplementaPersona);
                    PersonaServicio.ObtenerPersona(this);
                    ILoginService LoginServicio = (ILoginService)AppContext.Instance.GetObject(ImplementaLogin);
                    LoginServicio.Buscar(this);
                    if (DniTutor != 0)
                    {
                        GrpMenor.Enabled = true;
                        TxtNombreTutor.Text = PersonaServicio.ObtenerNombre(DniTutor);
                    }
                    else
                    {
                        LimpiarCamposMenor();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    LimpiarCampos();
                }
            }
        }

        private void LimpiarCampos()
        {
            TxtDomicilio.Text = "";
            TxtApellido.Text="";
            TxtCelular.Text = "";
            TxtEmail.Text = "";
            TxtNombre.Text = "";
            TxtTelefono.Text = "";
            DtFechaNac.Value = DateTime.Today;
            CboLocalidades.SelectedIndex = -1;
            CboNacionalidad.SelectedIndex = -1;
            CboPais.SelectedIndex = -1;
            CboProvincia.SelectedIndex = -1;
            txtPassword.Text = "";
            txtUsuario.Text = "";
            LimpiarCamposMenor();


        }

        private void LimpiarCamposMenor()
        {
            GrpMenor.Enabled = false;
            TxtDniTutor.Text = "";
            TxtNombreTutor.Text = "";
            TxtRelacion.Text = "";

        }

        private void CboPais_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (CboPais.SelectedIndex > -1)
            {
                ProvServ = (IProvinciaService)AppContext.Instance.GetObject(ImplementaPais);
                ProvServ.Listado(this);

            }
        }

        private void CboProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (CboProvincia.SelectedIndex > -1)
            {
                LocServ = (ILocalidadService)AppContext.Instance.GetObject(ImplementaPais);
                LocServ.Listado(this);
            }
        }

        private void TxtDniTutor_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
            {
                try
                {
                    IPersonaService persona = (IPersonaService)AppContext.Instance.GetObject(ImplementaPersona);
                    TxtNombreTutor.Text = persona.ObtenerNombre(this.DniTutor);
                }

                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }

        private void DtFechaNac_CloseUp(object sender, EventArgs e)
        {
            if ((DateTime.Today.Year - DtFechaNac.Value.Year) < 18)
            {
                GrpMenor.Enabled = true;
            }
            else
            {
                GrpMenor.Enabled = false;
                LimpiarCamposMenor();
            }
        }

        private void BtnAgregarLocalidad_Click(object sender, EventArgs e)
        {
            Form NuevaLocalidad = new FrmAgregarLocalidades();
            if (NuevaLocalidad.ShowDialog() == DialogResult.OK)
            {
                PaisServ.Listado(this);
                PaisServ.ListadoNac(this);
                CboProvincia.Text = "";
                CboLocalidades.Text = "";
            }


        }

        private void TxtEmail_Leave(object sender, EventArgs e)
        {
            if (TxtEmail.Text != "")
            {
                string strRegex = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
                @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
                @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
                Regex re = new Regex(strRegex);
                if (!re.IsMatch(TxtEmail.Text))
                {
                    MessageBox.Show("El email ingresado es incorrecto. Ej: usuario@ejemplo.com");
                    TxtEmail.Text = "";
                    TxtEmail.Focus();
                }
            }
        }

        #endregion

        #region Implementaciones de Interfaces de Formulario

        #region IListadoPais Members

        public List<string> LstPais
        {

            set
            {
                CboPais.DataSource = value;
                CboPais.SelectedIndex = -1;


            }

        }

        #endregion

        #region IListadoProvincia Members

        public string Pais
        {
            get { return CboPais.SelectedItem.ToString(); }
        }

        public List<string> LstProvincia
        {
            set
            {
                CboProvincia.DataSource = value;

            }
        }

        #endregion

        #region IListadoLocalidades Members

        public string Provincia
        {
            get { return CboProvincia.SelectedItem.ToString(); }
        }

        public List<string> LstLocalidades
        {
            set { CboLocalidades.DataSource = value; }

        }

        #endregion

        #region IInterfazPersona Members

        public int Dni
        {
            get
            {
                return Convert.ToInt32(TxtDni.Text.Replace(",", ""));
            }
            set
            {
                TxtDni.Text = value.ToString();
            }
        }

        public string Nombre
        {
            get
            {
                return TxtNombre.Text;
            }
            set
            {
                TxtNombre.Text = value;
            }
        }

        public string Apellido
        {
            get
            {
                return TxtApellido.Text;
            }
            set
            {
                TxtApellido.Text = value;
            }
        }

        public DateTime FechaNac
        {
            get
            {
                return DtFechaNac.Value;
            }
            set
            {
                DtFechaNac.Value = value;
            }
        }

        public string Nacionalidad
        {
            get
            {
                return CboNacionalidad.SelectedItem.ToString();
            }
            set
            {
                CboNacionalidad.SelectedItem = value;
            }
        }

        public string TipoPersona
        {
            get
            {
                string tipo = "";

                if (ChkAfiliado.Checked)
                {
                    tipo += " Afiliado ";
                }
                if (ChkArbitro.Checked)
                {
                    tipo += " Arbitro ";
                }
                if (ChkEmpleado.Checked)
                {
                    tipo += " Empleado ";
                }
                return tipo;
            }
            set
            {
                if (value.Contains("Afiliado"))
                {
                    ChkAfiliado.Checked = true;
                }
                else
                {
                    ChkAfiliado.Checked = false;
                }
                if (value.Contains("Arbitro"))
                {
                    ChkArbitro.Checked = true;
                }
                else
                {
                    ChkArbitro.Checked = false;
                }
                if (value.Contains("Empleado"))
                {
                    ChkEmpleado.Checked = true;
                }
                else
                {
                    ChkEmpleado.Checked = false;
                }
            }
        }

        public bool Estado
        {
            get
            {
                if (CheckActivo.Checked)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            set
            {
                if (value == true)
                {
                    CheckActivo.Checked = true;
                }
                else
                {
                    CheckActivo.Checked = false;
                }
            }
        }

        public string Sexo
        {
            get
            {
                if (radioButton1.Checked)
                { return "Masculino"; }
                else
                { return "Femenino"; }
            }
            set
            {
                if (value == "Masculino")
                { radioButton1.Checked = true; }
                else
                { radioButton2.Checked = true; }
            }
        }

        string IInterfazPersona.Pais
        {
            get
            {
                return CboPais.SelectedItem.ToString();
            }
            set
            {
                CboPais.SelectedItem = value;
            }
        }

        string IInterfazPersona.Provincia
        {
            get
            {
                return CboProvincia.SelectedItem.ToString();
            }
            set
            {
                CboProvincia.SelectedItem = value;
            }
        }

        public string Localidad
        {
            get
            {
                return CboLocalidades.SelectedItem.ToString();
            }
            set
            {
                CboLocalidades.SelectedItem = value;
            }
        }

        public string Direccion
        {
            get
            {
                return TxtDomicilio.Text;
            }
            set
            {
                TxtDomicilio.Text = value;
            }
        }

        public string Telefono
        {
            get
            {
                return TxtTelefono.Text;
            }
            set
            {
                TxtTelefono.Text = value;
            }
        }

        public string Celular
        {
            get
            {
                return TxtCelular.Text;
            }
            set
            {
                TxtCelular.Text = value;
            }
        }

        public string Email
        {
            get
            {
                return TxtEmail.Text;
            }
            set
            {
                TxtEmail.Text = value;
            }
        }
        public int DniTutor
        {
            get
            {
                if (TxtDniTutor.Text.Replace(",", "") != "")
                {
                    return Convert.ToInt32(TxtDniTutor.Text.Replace(",", ""));
                }
                else
                {
                    return 0;
                }
            }
            set
            {
                TxtDniTutor.Text=value.ToString();
            }
        }

        public string NombreTutor
        {
            get
            {
                return TxtNombreTutor.Text;
            }
            set
            {
                TxtNombreTutor.Text = value;
            }
        }

        public string Relacion
        {
            get
            {
                return TxtRelacion.Text;
            }
            set
            {
                TxtRelacion.Text = value;
            }
        }

        #endregion

        #region IlistadoNacionalidad Members

        public List<string> LstNac
        {
            set
            {
                CboNacionalidad.DataSource = value;
                CboNacionalidad.SelectedIndex = -1;
            }
        }

        #endregion  
    
        #region Miembros de IInterfazLogin
        public string Usuario
        {
            get
            {
                return txtUsuario.Text;
            }
            set
            {
                txtUsuario.Text = value;
            }
        }

        public string Password
        {
            get
            {
                return txtPassword.Text;
            }
            set
            {
                txtPassword.Text = value;
            }
        }

        public int CantidadEmpleados
        {
            set { throw new NotImplementedException(); }
        }

        #endregion

        private void BtnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        #endregion

    }
}

